 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.resources;

 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.QualifiedName;

 /**
  * A lightweight interface for requesting information about a resource.
  * All of the "get" methods on a resource proxy have trivial performance cost.
  * Requesting the full path or the actual resource handle will cause extra objects
  * to be created and will thus have greater cost.
  * <p>
  * When a resource proxy is used within an {@link IResourceProxyVisitor},
  * it is a transient object that is only valid for the duration of a single visit method.
  * A proxy should not be referenced once the single resource visit is complete.
  * The equals and hashCode methods should not be relied on.
  * </p>
  * <p>
  * A proxy can also be created using {@link IResource#createProxy()}. In
  * this case the proxy is valid indefinitely, but will not remain in sync with
  * the state of the corresponding resource.
  * </p>
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
  * @see IResourceProxyVisitor
  * @since 2.1
  */
 public interface IResourceProxy {
     /**
      * Returns the modification stamp of the resource being visited.
      *
      * @return the modification stamp, or <code>NULL_STAMP</code> if the
      * resource either does not exist or exists as a closed project
      * @see IResource#getModificationStamp()
      */
     public long getModificationStamp();

     /**
      * Returns whether the resource being visited is accessible.
      *
      * @return <code>true</code> if the resource is accessible, and
      * <code>false</code> otherwise
      * @see IResource#isAccessible()
      */
     public boolean isAccessible();

     /**
      * Returns whether the resource being visited is derived.
      *
      * @return <code>true</code> if the resource is marked as derived, and
      * <code>false</code> otherwise
      * @see IResource#isDerived()
      */
     public boolean isDerived();

     /**
      * Returns whether the resource being visited is a linked resource.
      *
      * @return <code>true</code> if the resource is linked, and
      * <code>false</code> otherwise
      * @see IResource#isLinked()
      */
     public boolean isLinked();

     /**
      * Returns whether the resource being visited is a phantom resource.
      *
      * @return <code>true</code> if the resource is a phantom resource, and
      * <code>false</code> otherwise
      * @see IResource#isPhantom()
      */
     public boolean isPhantom();

     /**
      * Returns whether the resource being visited is a team private member.
      *
      * @return <code>true</code> if the resource is a team private member, and
      * <code>false</code> otherwise
      * @see IResource#isTeamPrivateMember()
      */
     public boolean isTeamPrivateMember();

     /**
      * Returns the simple name of the resource being visited.
      *
      * @return the name of the resource
      * @see IResource#getName()
      */
     public String getName();

     /**
      * Returns the value of the session property of the resource being
      * visited, identified by the given key. Returns <code>null</code> if this
      * resource has no such property.
      * <p>
      * Note that this method can return an out of date property value, or a
      * value that no longer exists, if session properties are being modified
      * concurrently with the resource visit.
      * </p>
      *
      * @param key the qualified name of the property
      * @return the string value of the session property,
      * or <code>null</code> if the resource has no such property
      * @see IResource#getSessionProperty(QualifiedName)
      */
     public Object getSessionProperty(QualifiedName key);

     /**
      * Returns the type of the resource being visited.
      *
      * @return the resource type
      * @see IResource#getType()
      */
     public int getType();

     /**
      * Returns the full workspace path of the resource being visited.
      * <p>
      * Note that this is not a &quot;free&quot; proxy operation. This method
      * will generally cause a path object to be created. For an optimal
      * visitor, only call this method when absolutely necessary. Note that the
      * simple resource name can be obtained from the proxy with no cost.
      * </p>
      * @return the full path of the resource
      * @see IResource#getFullPath()
      */
     public IPath requestFullPath();

     /**
      * Returns the handle of the resource being visited.
      * <p>
      * Note that this is not a &quot;free&quot; proxy operation. This method will
      * generally cause both a path object and a resource object to be created.
      * For an optimal visitor, only call this method when absolutely necessary.
      * Note that the simple resource name can be obtained from the proxy with no
      * cost, and the full path of the resource can be obtained through the proxy
      * with smaller cost.
      * </p>
      * @return the resource handle
      */
     public IResource requestResource();
 }

